home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
System Booster
/
System Booster.iso
/
CD-ROM Tools
/
MCDPlayer
/
Source
/
Titlelist.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-09-26
|
10KB
|
320 lines
#include <intuition/intuition.h>
#include <intuition/gadgetclass.h>
#include <libraries/gadtools.h>
#include <graphics/displayinfo.h>
#include <graphics/gfxbase.h>
#include <clib/gadtools_protos.h>
#include <string.h>
#include "mcdplayer.h"
#define GD_ListInt 0
#define GD_ListTitel 1
#define GD_ListAktTitel 2
#define GD_ListTitelliste 3
#define GD_ListSave 4
#define GD_ListAbbruch 5
#define GD_ListBenutzen 6
struct Window *ListWnd = NULL;
struct Gadget *ListGList = NULL;
struct Gadget *ListGadgets[7];
WORD ListLeft;
WORD ListTop;
UWORD ListWidth = 348;
UWORD ListHeight = 174;
UBYTE *ListWdt = (UBYTE *)"Titelliste";
struct List TitList;
struct Node TitNode[100];
char *Titles;
void InitTitleList( void )
{
int i;
if (Titles = AllocMem( 10000, MEMF_ANY|MEMF_CLEAR ))
{
NewList( &TitList );
for( i=0; i<TOC_NumTracks; i++ )
{
TitNode[i].ln_Name = &(Titles[i*100]);
strcpy( &(Titles[i*100]), TOC_Title[i] );
AddTail( &TitList, &TitNode[i] );
};
}
}
void ExitTitleList( int Action ) /* 0=Exit, 1=Use, 2=Save */
{
struct StringInfo *sti;
char *a;
char Buffer[256];
int i;
BPTR FH;
if (Action!=0)
{
a = TOC_TitleStrs;
sti = ListGadgets[GD_ListInt]->SpecialInfo;
strcpy( a, sti->Buffer );
TOC_CDInterpret = a;
a += strlen( a )+1;
sti = ListGadgets[GD_ListTitel]->SpecialInfo;
strcpy( a, sti->Buffer );
TOC_CDTitle = a;
a += strlen( a )+1;
for( i=0; i<TOC_NumTracks; i++ )
{
strcpy( a, &Titles[i*100] );
TOC_Title[i] = a;
a += strlen( a )+1;
}
};
if (Action==2)
{
sprintf( Buffer, SongPath );
AddPart( Buffer, TOC_CDID, 130 );
if (FH = Open( Buffer, MODE_NEWFILE ))
{
FPuts( FH, TOC_CDInterpret );
FPutC( FH, '\n' );
FPuts( FH, TOC_CDTitle );
FPutC( FH, '\n' );
for( i=0; i<TOC_NumTracks; i++ )
{
FPuts( FH, TOC_Title[i] );
FPutC( FH, '\n' );
};
Close( FH );
};
};
if (Titles) FreeMem( Titles, 10000 );
}
int OpenListWindow( void )
{
struct NewGadget ng;
struct Gadget *g;
UWORD offx, offy;
if ( ! ( Scr = LockPubScreen( 0 )))
return( 1L );
PlaceWnd( Scr, ListWidth, ListHeight + offy, &ListLeft, &ListTop, 0 );
if ( ! ( VisualInfo = GetVisualInfo( Scr, TAG_DONE )))
return( 2L );
offx = Scr->WBorLeft;
offy = Scr->WBorTop + Scr->RastPort.TxHeight + 1;
if ( ! ( g = CreateContext( &ListGList )))
return( 1L );
ng.ng_LeftEdge = offx + 84;
ng.ng_TopEdge = offy + 2;
ng.ng_Width = 250;
ng.ng_Height = 14;
ng.ng_GadgetText = (UBYTE *)"Interpret";
ng.ng_TextAttr = &topaz8;
ng.ng_GadgetID = GD_ListInt;
ng.ng_Flags = PLACETEXT_LEFT;
ng.ng_VisualInfo = VisualInfo;
g = CreateGadget( STRING_KIND, g, &ng, GTST_MaxChars, 100, GTST_String, TOC_CDInterpret, TAG_DONE );
ListGadgets[ 0 ] = g;
ng.ng_TopEdge = offy + 17;
ng.ng_GadgetText = (UBYTE *)"CD-Titel ";
ng.ng_GadgetID = GD_ListTitel;
g = CreateGadget( STRING_KIND, g, &ng, GTST_MaxChars, 100, GTST_String, TOC_CDTitle, TAG_DONE );
ListGadgets[ 1 ] = g;
ng.ng_TopEdge = offy + 140;
ng.ng_GadgetText = (UBYTE *)"Titel ";
ng.ng_GadgetID = GD_ListAktTitel;
g = CreateGadget( STRING_KIND, g, &ng, GTST_MaxChars, 100, TAG_DONE );
ListGadgets[ 2 ] = g;
ng.ng_TopEdge = offy + 32;
ng.ng_Height = 120;
ng.ng_GadgetText = NULL;
ng.ng_GadgetID = GD_ListTitelliste;
ng.ng_Flags = 0;
g = CreateGadget( LISTVIEW_KIND, g, &ng, GTLV_Labels, &TitList, GTLV_ShowSelected, ListGadgets[2], TAG_DONE );
ListGadgets[ 3 ] = g;
ng.ng_LeftEdge = offx + 5;
ng.ng_TopEdge = offy + 153;
ng.ng_Width = 80;
ng.ng_Height = 14;
ng.ng_GadgetText = (UBYTE *)"Sichern";
ng.ng_GadgetID = GD_ListSave;
ng.ng_Flags = PLACETEXT_IN;
g = CreateGadget( BUTTON_KIND, g, &ng, TAG_DONE );
ListGadgets[ 4 ] = g;
ng.ng_LeftEdge = offx + 254;
ng.ng_GadgetText = (UBYTE *)"Abbruch";
ng.ng_GadgetID = GD_ListAbbruch;
g = CreateGadget( BUTTON_KIND, g, &ng, TAG_DONE );
ListGadgets[ 5 ] = g;
ng.ng_LeftEdge = offx + 128;
ng.ng_GadgetText = (UBYTE *)"Benutzen";
ng.ng_GadgetID = GD_ListBenutzen;
g = CreateGadget( BUTTON_KIND, g, &ng, TAG_DONE );
ListGadgets[ 6 ] = g;
if ( ! g )
return( 2L );
if ( ! ( ListWnd = OpenWindowTags( NULL,
WA_Left, ListLeft,
WA_Top, ListTop,
WA_Width, ListWidth,
WA_Height, ListHeight + offy,
WA_IDCMP, STRINGIDCMP|LISTVIEWIDCMP|BUTTONIDCMP|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW,
WA_Flags, WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
WA_Gadgets, ListGList,
WA_Title, ListWdt,
WA_PubScreen, Scr,
TAG_DONE )))
return( 4L );
GT_RefreshWindow( ListWnd, NULL );
UnlockPubScreen( NULL, Scr );
Scr = NULL;
return( 0L );
}
void CloseListWindow( void )
{
if ( ListWnd )
{
CloseWindow( ListWnd );
ListWnd = NULL;
}
if ( ListGList )
{
FreeGadgets( ListGList );
ListGList = NULL;
}
if ( VisualInfo )
{
FreeVisualInfo( VisualInfo );
VisualInfo = NULL;
}
if ( Scr )
{
UnlockPubScreen( NULL, Scr );
}
}
void TitleList( void )
{
ULONG GClass;
USHORT GCode;
struct Gadget *GList = 0l;
struct IntuiMessage *msg;
struct StringInfo *sti;
int Exit = 0;
int AktTitel = -1;
InitTitleList();
if (OpenListWindow()==0)
{
while( !Exit )
{
Wait( 1<<ListWnd->UserPort->mp_SigBit );
while ( (!Exit) && (msg = (struct IntuiMessage *) GT_GetIMsg( ListWnd->UserPort ) ))
{
GClass = msg->Class;
GCode = msg->Code;
if (GClass & (GADGETDOWN | GADGETUP | MOUSEMOVE) )
GList = (struct Gadget *) msg->IAddress;
GT_ReplyIMsg(msg);
switch (GClass)
{
case IDCMP_CLOSEWINDOW:
ExitTitleList(0);
CloseListWindow();
Exit = 1;
break;
case IDCMP_GADGETUP:
switch (GList->GadgetID)
{
case GD_ListAktTitel:
if (AktTitel!=-1)
{
sti = ListGadgets[GD_ListAktTitel]->SpecialInfo;
strcpy( &Titles[AktTitel*100], sti->Buffer );
if (AktTitel<TOC_NumTracks-1) AktTitel++;
GT_SetGadgetAttrs(ListGadgets[GD_ListTitelliste], ListWnd, 0, GTLV_Labels, &TitList, GTLV_Selected, AktTitel, TAG_DONE);
ActivateGadget(ListGadgets[GD_ListAktTitel], ListWnd, NULL );
};
break;
case GD_ListTitelliste:
AktTitel = GCode;
ActivateGadget(ListGadgets[GD_ListAktTitel], ListWnd, NULL );
break;
case GD_ListInt:
ActivateGadget(ListGadgets[GD_ListTitel], ListWnd, NULL );
break;
case GD_ListTitel:
ActivateGadget(ListGadgets[GD_ListInt], ListWnd, NULL );
break;
case GD_ListSave:
ExitTitleList(2);
CloseListWindow();
Exit = 1;
break;
case GD_ListAbbruch:
ExitTitleList(0);
CloseListWindow();
Exit = 1;
break;
case GD_ListBenutzen:
ExitTitleList(1);
CloseListWindow();
Exit = 1;
break;
};
break;
};
};
};
}
if (!Exit)
{
CloseListWindow();
ExitTitleList(0);
};
}